#include <iostream>
using namespace std;

// const成员:
// const修饰的成员属性:
//          const 修饰的属性必须在初始化列表中初始化(当然也可同普通成员变量一样在属性中直接赋值)
//          const 修饰的属性是常量(不可修改的左值)，不可被修改.
// const修饰的成员函数:
//          const 关键字卸载参数列表后面，函数的声明和实现都必须带const
//          内部不能修改非static成员变量
//          内部不能调用普通的成员函数(const修饰的成员变量除外)
//          非const成员函数可以调用const成员函数
//          const修饰的成员函数
class Person
{
public:
    Person()
    {
    }
    ~Person()
    {
    }
    // pubilc : void setBloobType(char blood)
    // {
    //     m_blooType = 'O';
    // }
    char getBloodType() const; // 函数的声明

    int getAge();

    void display()
    {
        // cout<< getAge()<< endl;
        cout << getBloodType() << endl;
    }

private:
    const char m_bloodType = 'm';
    int m_age = 20;
};

char Person::getBloodType() const // 函数的实现
{
#if 0
const修饰的成员函数:内部不能修改非static成员变量
        m_age += 1;
#endif

#if 0
const修饰的成员函数:内部不能调用普通的成员函数
    display();
#endif

    return m_bloodType;
}

int main()
{
    Person per1;
    per1.display();
    return;
}
